package com.liuyanzhao.blog.service;

import com.liuyanzhao.blog.entity.Article;
import com.liuyanzhao.blog.entity.custom.ArticleCustom;
import com.liuyanzhao.blog.entity.custom.ArticleDetailVo;
import com.liuyanzhao.blog.entity.custom.ArticleListVo;
import com.liuyanzhao.blog.entity.custom.ArticleSearchVo;
import org.springframework.ui.Model;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 
 * @author Baokai Wang
 * 对文章列表的操作
 * @CrateTime: 2019年6月23日
 */
public interface ArticleService {
	/**
	 * 
	 * 获取文章总数
	 * @param status
	 * @return Integer
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:02:03
	 */
	public Integer countArticle(Integer status) throws Exception;
	
	/**
	 * 
	 * 获取评论总数
	 * @param status
	 * @return Integer
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:12:02
	 */
	public Integer countArticleComment(Integer status) throws Exception;
	
	/**
	 * 
	 * 获得浏览量总数
	 * @param status
	 * @return Integer
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:22:27
	 */
	public Integer countArticleView(Integer status) throws Exception;
	
	/**
	 * 
	 * 获得所有文章不分页
	 * @param status
	 * @return
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:22:48
	 */
	public List<ArticleListVo> listArticle(Integer status) throws Exception;
	
	/**
	 * 
	 * 根据id获得文章
	 * @param status
	 * @param id
	 * @return ArticleCustom
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:23:11
	 */
	public ArticleCustom getArticleById(Integer status,Integer id) throws Exception;

	/**
	 * 
	 * 修改文章信息
	 * @param id
	 * @param article
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:23:29
	 */
	public void updateArticle(Integer id, Article article) throws Exception;

	/**
	 * 
	 * 批量删除文章
	 * @param ids
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:23:42
	 */
	public void deleteArticleBatch(Integer[] ids) throws  Exception;

	/**
	 * 
	 * 删除文章
	 * @param id
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:23:54
	 */
	public void deleteArticle(Integer id) throws Exception;

	/**
	 * 
	 * 分页显示()
	 * @param status
	 * @param pageNow
	 * @param pageSize
	 * @return
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:24:09
	 */
	public List<ArticleListVo> listArticleByPage(Integer status,Integer pageNow,Integer pageSize) throws Exception;
	
	/**
	 * 
	 * 文章详情页面显示
	 * @param id
	 * @return ArticleDetailVo
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:25:21
	 */
	public ArticleDetailVo getArticleDetailById(Integer id) throws Exception;
	
	/**
	 * 
	 * 文章查询分页显示
	 * @param status
	 * @param request
	 * @param model
	 * @param pageNow
	 * @param pageSize
	 * @param s
	 * @return List<ArticleSearchVo>
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:26:22
	 */
	public List<ArticleSearchVo> listSearchResultByPage(Integer status,HttpServletRequest request, Model model, Integer pageNow, Integer pageSize, String s) throws Exception;
 
	/**
	 * 
	 * 获得相关文章
	 * @param status
	 * @param parentCategoryId
	 * @param childCategoryId
	 * @param limit
	 * @return List<ArticleCustom>
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:26:44
	 */
	public List<ArticleCustom> listArticleWithSameCategory(Integer status,Integer parentCategoryId,Integer childCategoryId, Integer limit) throws Exception;
	
	/**
	 * 
	 * 获取访问量较多的文章
	 * @param status
	 * @param limit
	 * @return List<ArticleCustom>
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:30:33
	 */
	public List<ArticleCustom> listArticleByViewCount(Integer status,Integer limit) throws Exception;

	/**
	 * 
	 * 获得上一篇文章
	 * @param status
	 * @param id
	 * @return ArticleCustom
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:30:50
	 */
	public ArticleCustom getAfterArticle(Integer status,Integer id) throws Exception;
	
	/**
	 * 
	 * 获得下一篇文章
	 * @param status
	 * @param id
	 * @return ArticleCustom
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:31:10
	 */
	public ArticleCustom getPreArticle(Integer status,Integer id) throws Exception;
	
	/**
	 * 
	 * 获得随机文章
	 * @param status
	 * @param limit
	 * @return List<ArticleCustom>
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:31:25
	 */
	public List<ArticleCustom> listRandomArticle(Integer status,Integer limit) throws  Exception;
	
	/**
	 * 
	 * 获得评论数较多的文章
	 * @param status
	 * @param limit
	 * @return List<ArticleCustom>
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:31:44
	 */
	public List<ArticleCustom> listArticleByCommentCount(Integer status,Integer limit) throws Exception;

	/**
	 * 
	 * 添加文章
	 * @param article
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:32:02
	 */
	public void insertArticle(Article article) throws Exception;

	/**
	 * 
	 * 获得某个分类的文章数
	 * @param status
	 * @param id
	 * @return Integer
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:32:15
	 */
	public Integer countArticleWithCategory(Integer status,Integer id) throws Exception;

	/**
	 * 
	 * 获得某个标签的文章数
	 * @param status
	 * @param id
	 * @return Integer
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:32:35
	 */
	public Integer countArticleWithTag(Integer status,Integer id) throws Exception;

	/**
	 * 
	 * 更新文章的评论数
	 * @param articleId
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:32:49
	 */
	public void updateCommentCount(Integer articleId) throws Exception;

	/**
	 * 
	 * 获得最后更新记录
	 * @return ArticleCustom
	 * @throws Exception
	 * @author Baokai Wang
	 * @CreateDate: 2019年6月23日 下午8:33:03
	 */
	public ArticleCustom getLastUpdateArticle() throws Exception;
}
